Study guide · Data & Analytics

SnowPro Core Certification (COF-C03): Study Guide

intermediate

A practical, step-by-step plan to take SnowPro Core from "interested" to exam-ready - the mechanics, what to study in what order, how to practise, and how to know you are ready.

By The Exam Atlas Editorial Team · Verified 2026-06-07

Study plans by timeline

4-week intensiveWith solid Snowflake experience (~10-12 hrs/week): one week each on architecture, loading and transformations, performance, then security and data protection, ending with mocks.
6-week balancedThe default (~6-8 hrs/week): roughly a week per topic area with hands-on tasks in a free trial, and timed practice in the final week.
8-week steadyFor those newer to Snowflake (~4-5 hrs/week): start with SQL and the three-layer architecture, then build loading, performance, security and data sharing.

What to study, in order

Week 1Architecture: the three layers (storage, compute, cloud services), virtual warehouses, micro-partitions and editions
Week 2Data loading and unloading: stages, COPY INTO, Snowpipe, file formats; plus transformations on semi-structured data (VARIANT, FLATTEN)
Week 3Performance and cost: warehouse sizing and scaling, the caching layers, clustering and pruning, credit consumption
Week 4Security (RBAC, masking) and data protection (Time Travel, Fail-safe, zero-copy clone, secure data sharing)
Weeks 5-6Full topic review across all six areas and timed practice questions in a free Snowflake trial account

The SnowPro Core Certification (COF-C03) is Snowflake’s foundational credential and the entry point to the whole SnowPro programme. It certifies a broad working knowledge of the Snowflake AI Data Cloud: the architecture, how you load and transform data, how performance and cost are managed, and how data is protected and shared. The defining feature of this exam is breadth, not depth. It is a knowledge-based multiple-choice test rather than a hands-on lab, and it spans six topic areas, so a thin spot in any one of them costs marks. The fastest way to close those spots is to use a free Snowflake trial account alongside your reading, because the concepts are far easier to retain once you have actually done them.

This guide is a full self-study course. It walks through each of the six topic areas in depth, gets the precise distinctions right (especially the Time Travel versus Fail-safe trap and the three caching layers), then turns the content into a week-by-week plan, a final-week routine and an exam-day description. It is original teaching material and study guidance only. It contains no real or simulated exam questions, and you should always confirm the current exam code, format and any published details against Snowflake’s own SnowPro Core certification page before you book.

Chapter 1: Exam overview and how to use this guide

What SnowPro Core actually measures

SnowPro Core measures whether you understand how Snowflake works as a platform well enough to use it competently across its main features. It is the prerequisite mindset for the advanced, role-based SnowPro tracks (Data Engineer, Data Analyst, Architect, Administrator), so it is deliberately a foundation: wide coverage at a working level rather than deep specialism. Snowflake sets no formal prerequisites, but it recommends at least six months of hands-on Snowflake experience, and that recommendation is the best guide to preparation, because the questions reward people who have actually created warehouses, loaded data and worked with the security model.

The exam is organised into six topic areas: Snowflake AI Data Cloud features and architecture; account access and security; performance concepts; data loading and unloading; data transformations; and data protection and data sharing. Critically, Snowflake does not publish a fixed percentage weight for each area. The planning consequence is that you should prepare broadly and evenly across all six rather than over-investing in one on the assumption it is heavier; you cannot know the exact mix, so balanced competence is the safe strategy.

Format, version and the scaled score

The current version of the exam is COF-C03, which replaced the earlier COF-C02 in early 2026, so if you are booking now you sit COF-C03; always confirm the live code on the official page before registering, since studying old version material is a common and avoidable mistake. The exam is multiple-choice and multiple-select, delivered through Pearson VUE online-proctored or at a test centre, and is widely reported as around 100 questions in about 115 minutes (confirm the current count and time on the official page, as these can change). You need a scaled score of 750 out of 1000 to pass. Because scoring is scaled rather than a raw percentage, the right target is broad competence across all six areas, not a count of correct answers. The credential is valid for two years, and you keep it current by passing a recertification exam before it expires, a small but real ongoing commitment.

How to use this course

Read the chapters in order, and start with architecture, because Chapter 2 is the foundation that the other five areas rest on. Almost everything distinctive about Snowflake, independent compute, caching, instant cloning, live sharing, follows from one architectural idea, so understanding it early makes the rest click. Treat the bold terms as a checklist, and where you can, reproduce each in a free trial account. The final chapters turn the content into a schedule, a final-week routine and an exam-day plan. Short worked examples appear where an idea is easy to misread, but none of these are exam questions; they are teaching illustrations.

Chapter 2: Snowflake AI Data Cloud features and architecture

This area underpins almost everything else on the exam, which is why it is taught first and given the most space. The central concept is Snowflake’s multi-cluster shared-data architecture, and once it clicks, the rest of the platform becomes much easier to reason about.

The three independent layers

Snowflake separates the work of a data platform into three layers that scale independently. The storage layer holds all table data, compressed and organised in a columnar format, in cloud object storage; it is centralised, so there is one copy of the data that everything else reads. The compute layer is made of virtual warehouses, independent clusters that run queries and data loads; multiple warehouses can work against the same stored data at the same time without competing for resources. The cloud services layer is the brain that coordinates everything: authentication, metadata, query optimisation, transaction management and security. The key insight the exam keeps returning to is that compute and storage are decoupled: you can resize or add compute without moving data, and several teams can query the same data on separate warehouses without contention. As a teaching example: if a data-science team runs heavy queries on one warehouse while finance runs reports on another, neither slows the other down, because they share the storage but not the compute. That single idea explains warehouses, caching, cloning and sharing later on.

Virtual warehouses

A virtual warehouse is an independent compute cluster you start to run queries and loads, billed in credits only while it is running. Warehouses come in t-shirt sizes (XS, S, M, L and larger), and the size determines power and cost. You can scale up (choose a bigger size) to make a single large or complex query faster, or scale out by configuring a multi-cluster warehouse that adds clusters automatically to handle more concurrent users and queries. The distinction is worth holding precisely: up is for the power of one query, out is for the concurrency of many. Warehouses can also auto-suspend when idle and auto-resume when a query arrives, which is the main lever for controlling cost.

Micro-partitions and pruning

Snowflake automatically stores table data in micro-partitions, small, immutable, columnar units, and keeps metadata about each one (such as the range of values it contains). This enables pruning: when a query runs, Snowflake uses the metadata to skip the micro-partitions that cannot possibly match, scanning far less data. Pruning is the foundation of Snowflake’s query performance, and it is why the platform is fast on large tables without manual indexing. A clustering key can be defined on very large tables to co-locate related rows into the same micro-partitions, which makes pruning more effective for the queries that filter on that key; clustering is something you reach for on big tables with a clear filtering pattern, not by default.

Editions and platform features

Snowflake comes in editions (such as Standard, Enterprise and higher) that differ in features and limits; the edition matters for the exam mainly because some capabilities, including longer Time Travel retention, depend on it. Beyond that, this area expects awareness of the core platform features that the later chapters expand on, all of which are made possible by the three-layer design.

Chapter 3: Account access and security

This area is about controlling who can do what, and its heart is Snowflake’s access-control model. Getting the model and its vocabulary right covers most of what the exam asks here.

Role-based access control (RBAC)

Snowflake secures objects with role-based access control (RBAC), and the mechanism is precise: privileges are granted to roles, and roles are granted to users (and to other roles). A privilege is a specific permission on an object, such as SELECT on a table or USAGE on a warehouse. A role is a container that collects privileges. A user does not get privileges directly; they get a role, and the role carries the privileges. Because roles can be granted to other roles, they form a hierarchy with inheritance: a higher role inherits the privileges of the roles beneath it. Understanding this flow, privilege to role, role to user, with inheritance up the hierarchy, is the single most important thing in this area.

System-defined roles

Snowflake provides several system-defined roles with set purposes, and the exam expects you to recognise them. ACCOUNTADMIN is the top-level administrative role with the most power, used sparingly. SECURITYADMIN manages users, roles and grants. SYSADMIN manages warehouses, databases and other objects. PUBLIC is a role automatically granted to every user, used for objects everyone may access. Knowing roughly what each is responsible for, and that ACCOUNTADMIN sits at the top, is usually enough.

Authentication, network policies and masking

Beyond RBAC, this area covers a few protective mechanisms. Authentication is how users prove who they are, including multi-factor authentication and federated or key-pair options. A network policy allows or blocks account access by IP address range, restricting where connections can originate. Dynamic data masking is a column-level policy that masks sensitive values based on the querying role, so the same column shows full data to an authorised role and a masked value to others, without duplicating the data. As a teaching example: a masking policy on an email column might show the real address to a support-admin role and a redacted version to everyone else, decided at query time by the role in use. These mechanisms layer on top of RBAC to control not just what a role can touch but how and from where.

Chapter 4: Performance concepts

This area is about why a query is fast and what it consumes, and it ties directly back to the architecture. The exam rewards reasoning about performance and cost together, because in Snowflake the two are closely linked through compute credits.

Sizing, scaling and credits

As introduced in Chapter 2, you control performance first through the warehouse. Scaling up to a larger size gives a single heavy query more power; scaling out with a multi-cluster warehouse adds clusters to serve more concurrent queries. Both consume more credits, so the skill is matching the warehouse to the workload rather than oversizing. The cost levers that reduce waste are auto-suspend (stop billing when idle) and auto-resume (restart on demand): a warehouse that suspends quickly when no one is querying keeps credit consumption down. The teaching point the exam looks for is the link, bigger or more clusters means faster but more credits, and suspension is how you avoid paying for idle compute.

The caching layers

Snowflake has three caching layers, and knowing which one serves a query is a frequent exam point. The results cache lives in the cloud services layer and returns the exact result of an identical query for 24 hours without using any warehouse at all, so a repeated, unchanged query is effectively free and instant. The warehouse (local) cache holds data on a running warehouse from previous queries, speeding up subsequent queries that touch the same data; it is lost when the warehouse is suspended. The metadata cache in the services layer can answer some queries (such as simple counts) from statistics without scanning data. The clean way to hold them apart: results cache returns a whole prior result with no compute, warehouse cache reuses data on a live warehouse, and metadata cache answers from statistics.

Pruning and clustering in practice

The other half of performance is how much data a query scans, which comes back to micro-partition pruning: the less data Snowflake has to read, the faster and cheaper the query. Writing queries that filter on columns Snowflake can prune on, and, for very large tables, defining a clustering key that co-locates related rows, are the ways you improve this. The instinct to carry into the exam is that good performance in Snowflake is mostly about scanning less (pruning, clustering) and reusing more (caching), with warehouse size as the blunt instrument when those are not enough.

Chapter 5: Data loading and unloading

This area covers getting data into Snowflake and back out again. The vocabulary is specific and the exam tests it directly, so the goal is to make the loading path familiar.

Stages

A stage is a location for data files, and there are two kinds. An internal stage is storage managed inside Snowflake (which can be tied to a user, a table or named). An external stage points to storage in a cloud provider that you own, such as an Amazon S3 bucket, Azure Blob Storage or Google Cloud Storage. Stages are the staging ground between your files and your tables: data lands in a stage, then is loaded into a table. Understanding that a stage is where files sit before loading, and that external stages reference your own cloud storage, is the foundation for the rest of this area.

COPY INTO and file formats

The workhorse command is COPY INTO, which bulk-loads files from a stage into a table, and, used the other way, unloads data from a table out to files in a stage. A file format is a named set of parsing options (for example that the files are CSV with a particular delimiter, or JSON) that tells COPY INTO how to read the files; defining a reusable file format keeps loads consistent. The two directions are worth stating plainly: COPY INTO <table> loads in, and COPY INTO <stage> unloads out.

Snowpipe and continuous loading

Where COPY INTO is a bulk, batch operation you run, Snowpipe provides continuous, automated loading of files as they arrive in a stage, rather than waiting for a scheduled batch. It is the tool for near-real-time ingestion, loading small volumes of new data soon after it lands. The distinction the exam wants is the trigger and timing: COPY INTO is a batch load you initiate, while Snowpipe loads continuously and automatically as new files appear.

Chapter 6: Data transformations

This area is where Snowflake’s strengths with flexible data are tested, especially its ability to work with semi-structured data without a rigid up-front schema. It also covers the objects you build to package logic.

Semi-structured data: VARIANT and FLATTEN

Snowflake can store and query semi-structured data such as JSON, Avro and Parquet, and the key type is VARIANT, a column type that holds this flexible data inside a normal table. You can query into a VARIANT column directly to reach nested fields, which is Snowflake’s schema-on-read strength: you do not have to flatten everything into columns before loading. When the data contains nested arrays or objects, the FLATTEN function expands them into separate rows, so an array of items inside one record becomes one row per item that you can then query relationally. As a teaching example: a JSON record holding a customer and an array of their orders can be stored in a VARIANT column and then FLATTENed so each order becomes its own row for analysis. Being comfortable with VARIANT for storage and FLATTEN for expansion is the core of this area.

Views, functions and procedures

The rest of the area is the objects that hold logic. A view is a saved query presented as a virtual table; a secure view additionally hides its definition and underlying detail, which matters when sharing sensitive data, and a materialized view stores a precomputed, automatically maintained result for faster repeated queries. A user-defined function (UDF) is a custom function (in SQL, JavaScript, Python and other languages) that returns a value, used to package reusable calculations. A stored procedure runs procedural logic on the server side, able to perform operations and control flow rather than just return a value. Sequences generate unique increasing numbers, often for surrogate keys, and Snowflake also offers estimation functions (such as approximate distinct counts) that trade exactness for speed on very large data. You need to recognise what each object is for, not to write advanced versions of them.

Chapter 7: Data protection and data sharing, and study planning

This chapter covers the final topic area, where the exam’s most famous trap lives, and then turns the whole course into a study plan.

Continuous Data Protection: Time Travel and Fail-safe

Snowflake’s Continuous Data Protection (CDP) features guard data automatically, and the exam exploits the confusion between Time Travel and Fail-safe, so be exact. Time Travel lets you query or restore data as it was at an earlier point, within a retention window you configure. The available window depends on edition: on Standard Edition the retention is up to 1 day (the default), while on Enterprise Edition and higher it can be set up to 90 days. You control Time Travel, and you use it to recover from mistakes like an accidental delete or to query a past state. Fail-safe is different in every important way: it is a separate, non-configurable 7-day period that begins after the Time Travel retention ends, during which only Snowflake (not you) can recover data, as a last resort. The clean summary: Time Travel is user-controlled, configurable, and edition-dependent; Fail-safe is Snowflake-managed, fixed at 7 days, and not something you query. Confusing the two is the classic miss, so rehearse this distinction until it is automatic.

Zero-copy cloning

Zero-copy cloning (the CLONE command) creates an independent copy of a table, schema or database that shares the original micro-partitions until data changes. Because it does not physically duplicate data at first, the clone is instant and uses no extra storage initially; storage only grows as the clone or the original is modified and they diverge. This is why teams use clones to spin up full test or development copies of production data cheaply. Note it is a distinct mechanism from Time Travel: cloning makes a new object, Time Travel looks back at an existing one.

Secure data sharing

Secure data sharing gives another account live, read-only access to selected objects without copying any data: the consumer queries the provider’s data in place, always current, using their own compute. A share is the object that defines what is shared and with which accounts. When the consumer is not a Snowflake customer, the provider can create a reader account, a Snowflake-managed account through which the non-customer reads the shared data. The Snowflake Marketplace builds on sharing as a catalogue where providers publish data and services for others to access. The headline idea is that sharing moves access, not data, which is only possible because of the shared-storage architecture from Chapter 2.

Planning your study

With the six areas understood, pace them evenly, since no published weights mean balanced coverage is safest, and front-load the architecture because it explains the rest. Open a free Snowflake trial account and keep it open throughout, doing the tasks rather than only reading. A balanced plan runs about six weeks at roughly six to eight hours a week, roughly a week per area: architecture; loading and unloading; transformations; performance and cost; security and data protection; then a final week of full review and timed practice. People with solid Snowflake experience can compress to a four-week intensive at ten to twelve hours a week, while those newer to the platform should add about two weeks and start by building SQL and data-warehouse fundamentals. To turn whichever timeline you pick into dated weeks for your own start date, use the free study-plan generator. If you are weighing Snowflake against another data-engineering credential, the Databricks Data Engineer Associate vs SnowPro Core comparison sets out how the two platforms and exams differ.

Chapter 8: Final preparation, exam day, and format

Practise the full loop, then review weak areas

The exam is knowledge-based, but doing the work is the most efficient way to retain it, so in your practice complete the full loop at least once: create and resize a virtual warehouse, load files from a stage with COPY INTO, set up a Snowpipe, query JSON with VARIANT and FLATTEN, then try Time Travel, a zero-copy clone and a simple data share. Read the official documentation for any feature you cannot explain in your own words. Then move to timed practice questions across all six areas, treating each set as a diagnosis of weak topics and reviewing the reasoning behind every miss. Aim to score comfortably above the 750-out-of-1000 pass mark on fresh questions before you book.

Consolidate the deciding details

In the closing week, consolidate rather than learn new material. Re-walk the three-layer architecture and how warehouses scale up versus out; re-read the caching layers and be able to say which serves a repeated query; and rehearse the Time Travel versus Fail-safe distinction with the exact numbers (Time Travel configurable and edition-dependent, up to 1 day on Standard and up to 90 on Enterprise; Fail-safe a fixed, Snowflake-only 7 days afterward). These precise details are exactly where the exam separates a pass from a near miss. Use only legitimate materials, the official certification page, Snowflake documentation and your own trial account; sites offering recycled live questions breach Snowflake’s certification policy and copyright and teach recall instead of understanding.

What to expect on the day

On the day, you sit a multiple-choice and multiple-select exam through Pearson VUE, online-proctored or at a test centre, widely reported as around 100 questions in about 115 minutes (confirm the current figures on the official page when you book). If you test online, arrive early to clear the system and identity checks. Read each question for whether it wants one answer or several, and select all that apply when asked. Pace yourself across the time available; if a question is genuinely uncertain, make your best choice and move on. You need a scaled score of 750 out of 1000, and because the score is scaled across all six areas, broad competence beats deep mastery of one.

After the exam, recertification and next steps

Your result is typically shown at the end of the session. A pass earns the SnowPro Core credential, valid for two years; you keep it current by passing a recertification exam before it expires, so plan for that small ongoing commitment and check Snowflake’s certification policies for the current path. From here, the natural progression is a SnowPro Advanced role-based certification aligned to your job, such as Data Engineer, Data Analyst, Architect or Administrator, and if your work spans platforms, pairing it with a vendor-neutral data credential broadens your profile. Confirm the current COF-C03 exam details on the official Snowflake certification page before you book, since Snowflake updates its exams periodically.

Key concepts to master

Multi-cluster shared-data architecture
Snowflake's design separates storage, compute and cloud services into three independent layers, so you can scale compute without moving data.
Virtual warehouse
An independent compute cluster that runs queries and loads. You size it (XS to larger) and can scale up for bigger queries or out for more concurrency; it bills credits while running.
Micro-partition
Snowflake stores table data in small immutable columnar units. Metadata on each lets the engine prune partitions it does not need, which is the basis of query performance.
Caching
Three layers - the results cache (query results), the warehouse (local) cache, and metadata - reduce work and credits on repeated queries. Knowing which cache serves a query is a common exam point.
Time Travel and Fail-safe
Time Travel lets you query or restore data as it was within a retention window; Fail-safe is a separate, Snowflake-managed 7-day recovery period after Time Travel ends. They are not the same thing.
Zero-copy clone
CLONE creates a copy of a table, schema or database that shares the underlying micro-partitions until data changes, so the clone is instant and uses no extra storage at first.
Stages and COPY INTO
A stage is a location for data files (internal or external, e.g. S3). COPY INTO bulk-loads from a stage into a table or unloads out of one; Snowpipe automates continuous loading.
VARIANT and semi-structured data
The VARIANT type stores JSON and other semi-structured data; FLATTEN turns nested arrays into rows. Snowflake queries this without a fixed schema, a frequent exam topic.
Role-based access control (RBAC)
Privileges are granted to roles, and roles to users (and other roles). Understanding the role hierarchy and how privileges are inherited is central to the security area.
Secure data sharing
Shares give another account live, read-only access to selected objects with no data copied. The Marketplace and reader accounts build on this.

What you should be able to do

By exam day, you should be able to:

  • Explain the three-layer architecture and how virtual warehouses scale up versus out
  • Describe micro-partitions and how pruning and clustering affect performance
  • Identify which caching layer serves a repeated query and how it affects credits
  • Load data with stages and COPY INTO, and set up Snowpipe for continuous loading
  • Query semi-structured data using the VARIANT type and FLATTEN
  • Describe RBAC roles, privilege inheritance and dynamic data masking
  • Distinguish Time Travel from Fail-safe, and use a zero-copy clone
  • Set up secure data sharing and explain reader accounts and the Marketplace

How to practise

Open a free Snowflake trial account, since the concepts make far more sense once you have used them. Create a virtual warehouse and resize it, load files from a stage with COPY INTO, set up a Snowpipe, query JSON with VARIANT and FLATTEN, then explore Time Travel, a zero-copy clone and a simple data share. Read the official documentation for any feature you cannot explain, and use timed practice questions to find weak areas before booking. Confirm the current COF-C03 exam details on the official page.

  • Practise actively from early on - recall and apply, don't just re-read.
  • Each week, review the previous week's weak spots before moving on.
  • Do at least one full-length, timed mock near the end, then a second after fixing weak areas.
  • Warm up with our original SnowPro Core practice questions (concept checks, not exam dumps).

We never publish exam dumps or "real" questions. Use official practice and reputable providers for question banks.

Are you ready? (readiness checklist)

  • You score at or above the pass mark (750 / 1000 (scaled)) on full-length, timed mocks - consistently, not once.
  • No more than one or two weak domains remain, and you know exactly which.
  • You can explain why the wrong options are wrong, not just spot the right one.
  • You've completed at least one full-length mock under real time pressure.
  • You could pass next week, not only on the day you crammed.

On exam day

A knowledge-based exam of multiple-choice and multiple-select questions through Pearson VUE, online-proctored or at a test centre. It is widely reported as around 100 questions in about 115 minutes (confirm on the official page). You need a scaled score of 750 out of 1000 to pass, and results are typically shown at the end.

  • Arrive early, or run the online-proctoring system check well ahead; have valid ID ready.
  • Budget your time per question and keep moving - don't sink minutes into one item.
  • Where the format allows, flag hard questions and return to them rather than stalling.
  • Read scenario and performance-based questions twice: work out what is actually asked first.
  • Taper in the final days - light review and rest beat an all-nighter.

Common mistakes to avoid

  • Confusing Time Travel with Fail-safe - Time Travel is user-accessible within a retention window; Fail-safe is a separate 7-day period only Snowflake can use to recover data.
  • Studying only the theory without a free Snowflake trial open; the exam rewards people who have actually loaded data, sized a warehouse and run queries.
  • Memorising features without understanding the three-layer architecture, which underpins almost every other topic on the exam.
  • Sitting the old COF-C02 material - the current exam is COF-C03; confirm the live exam code on the official page before booking.
  • Treating the topic areas as evenly weighted percentages - Snowflake does not publish a fixed weight per area, so prepare broadly across all six.

Resource stack

Start with the free and official resources above. Paid courses and question banks help if you want structure, but they are optional, not required to pass.

What to study next

Once you hold SnowPro Core, the natural progression is a SnowPro Advanced role-based certification aligned to your job, such as Data Engineer, Data Analyst, Architect or Administrator. If your work spans platforms, pairing it with a vendor-neutral data-engineering credential broadens your profile. Confirm the current advanced tracks on the Snowflake certification site.

FAQ

How long does it take to study for SnowPro Core?
With six or more months of hands-on Snowflake experience, most people need around 30-50 hours over 4-6 weeks. If you are new to Snowflake, build SQL and data-warehouse fundamentals first and budget more time.
Do I need hands-on Snowflake experience for COF-C03?
It is not a formal requirement, but Snowflake recommends at least six months of hands-on use, and it shows. The exam covers warehouses, loading, caching, security and data sharing - all easier to answer if you have done them in a free trial account.
Which topic area is the hardest on SnowPro Core?
It varies by background, but architecture and performance trip up people who only know the SQL surface. Understanding the three-layer design, micro-partitions, caching and warehouse scaling - and how they affect cost - is the conceptual core. Data protection (Time Travel vs Fail-safe) is also a common stumbling block.
Is SnowPro Core a hands-on lab exam?
No. It is a knowledge-based exam of multiple-choice and multiple-select questions through Pearson VUE. There is no live lab, but practising in a real Snowflake account is still the best preparation because it makes the concepts concrete.
How many practice questions should I do?
Work through enough timed practice to be comfortably above the pass mark on fresh questions, and use each set to find weak topic areas. Avoid 'exam dump' sites, which breach Snowflake's policy; build a free trial account and practise the real tasks instead.

Sources